iT邦幫忙

2023 iThome 鐵人賽

DAY 26
0
自我挑戰組

node.js 從初學者到高手!系列 第 26

Day 26 node.js - 使用node.js的FileSystem讀取、編輯檔案

  • 分享至 

  • xImage
  •  

大家好,今天我們會來學習如何在程式中讀取、編輯、刪除其他檔案。

首先這些功能都是由"FileSystem"所提供的,所以在程式的開頭我們必須將它import進來。因為是FileSystem的意思,所以它的名稱叫做'fs',就用我們昨天學到的方法將其import進我們的程式吧:

const fs = require('fs');

接下來先看如何讀取檔案吧!

讀取檔案的method為readFile,而它的參數要放我們的檔案位置,以及一個function,代表我們要做什麼事情。

以下為我的範例:

const fs = require('fs');

fs.readFile('./text.txt', (err, data) => {
    if(err){
        console.log(err);
    }
    console.log("此檔案中的文字為 : " + data.toString());
});

首先,如果我們要讀取一個檔案,那那一個檔案就必須先被創造出來,否則就會傳回error。這裡我是將我要讀取的txt檔放在與我的js檔同樣的資料夾,這樣在輸入它的位置時只需要在名稱前面加上"./",代表此檔案與程式位於同一個資料夾,這樣就好了!
再來,在function通常會需要兩個參數-err和data,當讀取時發生錯誤,例如檔案不存在,那err值就會等於true,進而產生錯誤訊息。而data則是代表著檔案中的資料。
這裡在印出檔案中的字串時,會需要使用toString function,因為如果沒有將讀到的資訊轉換為字串的話,程式就會印出一些我目前還看不懂代表什麼意思的buffer。XD

下面是正常的output (txt檔內容為"Hello World!"):
https://ithelp.ithome.com.tw/upload/images/20231010/20163170PmSvYig2X7.png
下面是若只印出data的output:
https://ithelp.ithome.com.tw/upload/images/20231010/20163170xBHiJMg8JS.png
如果讀取失敗產生的error message:
https://ithelp.ithome.com.tw/upload/images/20231010/20163170gLu7y8Issd.png

接著是編輯檔案的部分!編輯檔案要使用writeText這個method,而它的功能是讓我們直接改寫檔案中的內,語法其實和讀取檔案大同小異~直接來看範例吧:

const fs = require('fs');

fs.writeFile('./text.txt', 'Goodmorning World~', () => {
    console.log('檔案已成功被修改。');
});

fs.readFile('./text.txt', (err, data) => {
    if(err){
        console.log(err);
    }
    console.log("此檔案中的文字為 : " + data.toString());
});

可以看到兩者都一樣先指定檔案,並且後面都有一個function,但在writeFile中我們還需要有一個參數,裡面要放置我們想要修改成的內容。

最後結果為:
https://ithelp.ithome.com.tw/upload/images/20231010/201631706doTLhwC2b.png
且text.txt中的內容也被修改囉!:
https://ithelp.ithome.com.tw/upload/images/20231010/20163170UacvpLBhQj.png
另外,在writeFile中指定的檔案並不需要事先存在喔!如果我們指定的檔案不存在,系統會自動生成一個檔案並將裡面的內容設為我們所輸入的文字,非常方便~~

以上為今天的學習,明天見~


上一篇
Day 25 node.js - import, export, modules的概念
下一篇
Day 27 node.js - stream, buffer之概念 & 如何有效率的讀取和寫入檔案
系列文
node.js 從初學者到高手!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言